Laporan Praktikum Pemrograman Web 10

A. Migration untuk tabel majors

Buat migrasi database dengan menggunakan command berikut di terminal:

php artisan make:migration create_majors_table

Kemudian tambahkan kode berikut di function up():

Schema::create('majors', function (Blueprint $table) { 
            $table->id(); 
            $table->string('name'); 
            $table->timestamps(); 
        });

B. Migration untuk tabel students

Buat migrasi database dengan menggunakan command berikut di terminal:

code>php artisan make:migration create_students_table
                

Kemudian tambahkan kode berikut di function up():

Schema::create('students', function (Blueprint $table) { 
            $table->id(); 
            $table->string('nim')->unique(); 
            $table->string('name'); 
            $table->text('address'); 
            $table->foreignId('major_id')->constrained('majors')->onDelete('cascade'); 
            $table->timestamps(); 
        });

C. Migration untuk tabel subjects

Buat migrasi database dengan menggunakan command berikut di terminal:

php artisan make:migration create_subjects_table
                

Kemudian tambahkan kode berikut di function up():

Schema::create('subjects', function (Blueprint $table) { 
            $table->id(); 
            $table->string('name'); 
            $table->integer('sks'); 
            $table->timestamps(); 
        });

D. Migration untuk tabel pivot student_subject

Buat migrasi database dengan menggunakan command berikut di terminal:

php artisan make:migration create_student_subject_table

Kemudian tambahkan kode berikut di function up():

Schema::create('student_subject', function (Blueprint $table) { 
            $table->id(); 
            $table->foreignId('student_id')->constrained('students')->onDelete('cascade'); 
            $table->foreignId('subject_id')->constrained('subjects')->onDelete('cascade'); 
            $table->timestamps(); 
             
            // Mencegah duplikasi kombinasi student_id dan subject_id 
            $table->unique(['student_id', 'subject_id']); 
        });

Setelah semua migrasi telah dibuat dan disave, jalankan migrasi database dengan perintah terminal:

php artisan migrate

A, Model Major

Buat model dengan menggunakan command berikut di terminal:

php artisan make:model Major

Setelah itu, masukkan kode berikut di model:

hasMany(Student::class); 
    } 
} 

B. Model Student

Buat model dengan menggunakan command berikut di terminal:

php artisan make:model Student

Setelah itu, masukkan kode berikut di model:

belongsTo(Major::class); 
    } 
  
    // Relationship: Many Students belong to many Subjects 
    public function subjects() 
    { 
        return $this->belongsToMany(Subject::class); 
    } 
} 

C. Model Subject

Buat model dengan menggunakan command berikut di terminal::

php artisan make:model Subject 

Setelah itu, masukkan kode berikut di model:

belongsToMany(Student::class); 
    } 
} 

Langkah selanjutnya yaitu membuat sebuah seeder untuk memasukkan data ke dalam database.

A. Seeder untuk Major

Buat seeder dengan menggunakan command berikut di terminal: :

php artisan make:seeder MajorSeeder

Setelah itu, masukkan kode berikut di seeder:

 'Teknik Informatika'], 
            ['name' => 'Sistem Informasi'], 
            ['name' => 'Teknik Komputer'], 
            ['name' => 'Manajemen Informatika'], 
        ]; 
  
        foreach ($majors as $major) { 
            Major::create($major); 
        } 
    } 
} 

B. Seeder untuk Subject

Buat seeder dengan menggunakan command berikut di terminal:

php artisan make:seeder SubjectSeeder

Setelah itu, masukkan kode berikut di seeder:

 'Pemrograman Web', 'sks' => 3], 
            ['name' => 'Database', 'sks' => 3], 
            ['name' => 'Algoritma', 'sks' => 2], 
            ['name' => 'Jaringan Komputer', 'sks' => 3], 
            ['name' => 'Sistem Operasi', 'sks' => 2], 
        ]; 
  
        foreach ($subjects as $subject) { 
            Subject::create($subject); 
        } 
    } 
} 

C.Seeder untuk Student

Buat seeder dengan menggunakan command berikut di terminal:

php artisan make:seeder StudentSeeder

Setelah itu, masukkan kode berikut di seeder

 '20210001', 'name' => 'Ahmad Rizki', 'address' => 'Jl. Merdeka No. 1', 
'major_id' => 1], 
            ['nim' => '20210002', 'name' => 'Siti Nurhaliza', 'address' => 'Jl. Sudirman No. 
15', 'major_id' => 1], 
            ['nim' => '20210003', 'name' => 'Budi Santoso', 'address' => 'Jl. Pahlawan No. 8', 
'major_id' => 2], 
            ['nim' => '20210004', 'name' => 'Dewi Kartika', 'address' => 'Jl. Diponegoro No. 
22', 'major_id' => 2], 
            ['nim' => '20210005', 'name' => 'Eko Prasetyo', 'address' => 'Jl. Gatot Subroto No. 
11', 'major_id' => 3], 
        ]; 
  
        foreach ($students as $studentData) { 
            $student = Student::create($studentData); 
             
            // Assign random subjects to each student 
            $subjects = Subject::inRandomOrder()->take(rand(2, 4))->pluck('id'); 
            $student->subjects()->attach($subjects); 
        } 
    } 
} 

D. Update DatabaseSeeder

Tambahkan kode berikut di DatabaseSeeder

call([ 
            MajorSeeder::class, 
            SubjectSeeder::class, 
            StudentSeeder::class, 
        ]); 
    } 
} 

Setelah semua seeder dibuat dan di save, jalankan seeder dengan perintah terminal:

php artisan db:seed

A. StudentController

Buat controller dengan perintah terminal berikut:

php artisan make:controller StudentController

tambahkan kode berikut di file kontroler

get(); 
return view('students.index', compact('students')); 
} 
public function show($id) 
{ 
$student = Student::with(['major', 'subjects'])->findOrFail($id); 
return view('students.show', compact('student')); 
} 
public function create() 
{ 
$majors = Major::all(); 
$subjects = Subject::all(); 
return view('students.create', compact('majors', 'subjects')); 
} 
public function store(Request $request) 
{ 
$request->validate([ 
'nim' => 'required|unique:students', 
'name' => 'required', 
'address' => 'required', 
'major_id' => 'required|exists:majors,id', 
'subjects' => 'required|array', 
'subjects.*' => 'exists:subjects,id', 
]); 
$student = Student::create($request->only(['nim', 'name', 'address', 'major_id'])); 
$student->subjects()->attach($request->subjects); 
return redirect()->route('students.index')->with('success', 'Student created 
successfully'); 
} 
public function edit($id) 
{ 
$student = Student::with('subjects')->findOrFail($id); 
$majors = Major::all(); 
$subjects = Subject::all(); 
return view('students.edit', compact('student', 'majors', 'subjects')); 
} 
public function update(Request $request, $id) 
{ 
$student = Student::findOrFail($id); 
         
        $request->validate([ 
            'nim' => 'required|unique:students,nim,' . $student->id, 
            'name' => 'required', 
            'address' => 'required', 
            'major_id' => 'required|exists:majors,id', 
            'subjects' => 'required|array', 
            'subjects.*' => 'exists:subjects,id', 
        ]); 
  
        $student->update($request->only(['nim', 'name', 'address', 'major_id'])); 
        $student->subjects()->sync($request->subjects); 
  
        return redirect()->route('students.index')->with('success', 'Student updated 
successfully'); 
    } 
  
    public function destroy($id) 
    { 
        $student = Student::findOrFail($id); 
        $student->subjects()->detach(); // Remove all subject relationships 
        $student->delete(); 
  
        return redirect()->route('students.index')->with('success', 'Student deleted 
successfully'); 
    } 
} 

Langkah selanjutnya yaitu membuat views untuk menampilkan pada halaman website.

A.layout utama

Buat file pada resources/views/layouts/app.blade.php. kodenya adalah seperti berikut:

 
 
 
     
     
    Student Management System 
     
 
 
     
  
    
@if(session('success'))
{{ session('success') }}
@endif @yield('content')

B. Index Students

Buat file pada resources/views/students/index.blade.php. kodenya adalah seperti berikut:

@extends('layouts.app') 
  
@section('content') 

Daftar Mahasiswa

Tambah Mahasiswa
@foreach($students as $student) @endforeach
NIM Nama Jurusan Mata Kuliah Total SKS Aksi
{{ $student->nim }} {{ $student->name }} {{ $student->major->name }} @foreach($student->subjects as $subject) {{ $subject->name }} @endforeach {{ $student->subjects->sum('sks') }} Detail Edit
@csrf @method('DELETE')
@endsection